{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy import stats\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "plt.rcParams['font.family']='SimHei'\n",
    "plt.rcParams['axes.unicode_minus']= False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>timestamp</th>\n",
       "      <th>group</th>\n",
       "      <th>landing_page</th>\n",
       "      <th>converted</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>851104</td>\n",
       "      <td>2017-01-21 22:11:48.556739</td>\n",
       "      <td>control</td>\n",
       "      <td>old_page</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>804228</td>\n",
       "      <td>2017-01-12 08:01:45.159739</td>\n",
       "      <td>control</td>\n",
       "      <td>old_page</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>661590</td>\n",
       "      <td>2017-01-11 16:55:06.154213</td>\n",
       "      <td>treatment</td>\n",
       "      <td>new_page</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>853541</td>\n",
       "      <td>2017-01-08 18:28:03.143765</td>\n",
       "      <td>treatment</td>\n",
       "      <td>new_page</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>864975</td>\n",
       "      <td>2017-01-21 01:52:26.210827</td>\n",
       "      <td>control</td>\n",
       "      <td>old_page</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id                   timestamp      group landing_page  converted\n",
       "0   851104  2017-01-21 22:11:48.556739    control     old_page          0\n",
       "1   804228  2017-01-12 08:01:45.159739    control     old_page          0\n",
       "2   661590  2017-01-11 16:55:06.154213  treatment     new_page          0\n",
       "3   853541  2017-01-08 18:28:03.143765  treatment     new_page          0\n",
       "4   864975  2017-01-21 01:52:26.210827    control     old_page          1"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv('ab_data.csv')\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "data[\"date\"] = data.timestamp.str[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>timestamp</th>\n",
       "      <th>group</th>\n",
       "      <th>landing_page</th>\n",
       "      <th>converted</th>\n",
       "      <th>date</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>851104</td>\n",
       "      <td>2017-01-21 22:11:48.556739</td>\n",
       "      <td>control</td>\n",
       "      <td>old_page</td>\n",
       "      <td>0</td>\n",
       "      <td>2017-01-21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>804228</td>\n",
       "      <td>2017-01-12 08:01:45.159739</td>\n",
       "      <td>control</td>\n",
       "      <td>old_page</td>\n",
       "      <td>0</td>\n",
       "      <td>2017-01-12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>661590</td>\n",
       "      <td>2017-01-11 16:55:06.154213</td>\n",
       "      <td>treatment</td>\n",
       "      <td>new_page</td>\n",
       "      <td>0</td>\n",
       "      <td>2017-01-11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>853541</td>\n",
       "      <td>2017-01-08 18:28:03.143765</td>\n",
       "      <td>treatment</td>\n",
       "      <td>new_page</td>\n",
       "      <td>0</td>\n",
       "      <td>2017-01-08</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>864975</td>\n",
       "      <td>2017-01-21 01:52:26.210827</td>\n",
       "      <td>control</td>\n",
       "      <td>old_page</td>\n",
       "      <td>1</td>\n",
       "      <td>2017-01-21</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id                   timestamp      group landing_page  converted  \\\n",
       "0   851104  2017-01-21 22:11:48.556739    control     old_page          0   \n",
       "1   804228  2017-01-12 08:01:45.159739    control     old_page          0   \n",
       "2   661590  2017-01-11 16:55:06.154213  treatment     new_page          0   \n",
       "3   853541  2017-01-08 18:28:03.143765  treatment     new_page          0   \n",
       "4   864975  2017-01-21 01:52:26.210827    control     old_page          1   \n",
       "\n",
       "         date  \n",
       "0  2017-01-21  \n",
       "1  2017-01-12  \n",
       "2  2017-01-11  \n",
       "3  2017-01-08  \n",
       "4  2017-01-21  "
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<bound method IndexOpsMixin.nunique of 0         851104\n",
       "1         804228\n",
       "2         661590\n",
       "3         853541\n",
       "4         864975\n",
       "           ...  \n",
       "294473    751197\n",
       "294474    945152\n",
       "294475    734608\n",
       "294476    697314\n",
       "294477    715931\n",
       "Name: user_id, Length: 294478, dtype: int64>"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.user_id.nunique"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>nunique</th>\n",
       "      <th>count</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2017-01-02</th>\n",
       "      <td>5783</td>\n",
       "      <td>5783</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-03</th>\n",
       "      <td>13387</td>\n",
       "      <td>13394</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-04</th>\n",
       "      <td>13274</td>\n",
       "      <td>13284</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-05</th>\n",
       "      <td>13116</td>\n",
       "      <td>13124</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-06</th>\n",
       "      <td>13519</td>\n",
       "      <td>13528</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-07</th>\n",
       "      <td>13373</td>\n",
       "      <td>13381</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-08</th>\n",
       "      <td>13556</td>\n",
       "      <td>13564</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-09</th>\n",
       "      <td>13432</td>\n",
       "      <td>13439</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-10</th>\n",
       "      <td>13518</td>\n",
       "      <td>13523</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-11</th>\n",
       "      <td>13547</td>\n",
       "      <td>13553</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-12</th>\n",
       "      <td>13313</td>\n",
       "      <td>13322</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-13</th>\n",
       "      <td>13230</td>\n",
       "      <td>13238</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-14</th>\n",
       "      <td>13321</td>\n",
       "      <td>13329</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-15</th>\n",
       "      <td>13442</td>\n",
       "      <td>13449</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-16</th>\n",
       "      <td>13314</td>\n",
       "      <td>13327</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-17</th>\n",
       "      <td>13318</td>\n",
       "      <td>13322</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-18</th>\n",
       "      <td>13272</td>\n",
       "      <td>13285</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-19</th>\n",
       "      <td>13289</td>\n",
       "      <td>13293</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-20</th>\n",
       "      <td>13383</td>\n",
       "      <td>13393</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-21</th>\n",
       "      <td>13469</td>\n",
       "      <td>13475</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-22</th>\n",
       "      <td>13415</td>\n",
       "      <td>13423</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-23</th>\n",
       "      <td>13504</td>\n",
       "      <td>13511</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-01-24</th>\n",
       "      <td>7533</td>\n",
       "      <td>7538</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            nunique  count\n",
       "date                      \n",
       "2017-01-02     5783   5783\n",
       "2017-01-03    13387  13394\n",
       "2017-01-04    13274  13284\n",
       "2017-01-05    13116  13124\n",
       "2017-01-06    13519  13528\n",
       "2017-01-07    13373  13381\n",
       "2017-01-08    13556  13564\n",
       "2017-01-09    13432  13439\n",
       "2017-01-10    13518  13523\n",
       "2017-01-11    13547  13553\n",
       "2017-01-12    13313  13322\n",
       "2017-01-13    13230  13238\n",
       "2017-01-14    13321  13329\n",
       "2017-01-15    13442  13449\n",
       "2017-01-16    13314  13327\n",
       "2017-01-17    13318  13322\n",
       "2017-01-18    13272  13285\n",
       "2017-01-19    13289  13293\n",
       "2017-01-20    13383  13393\n",
       "2017-01-21    13469  13475\n",
       "2017-01-22    13415  13423\n",
       "2017-01-23    13504  13511\n",
       "2017-01-24     7533   7538"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.groupby([\"date\"],as_index=False)[\"user_id\"].agg([\"nunique\",\"count\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. 检验指标确定（10分）\n",
    "一类指标  PV = DAU * 人均PV (既刻画了用户量,也刻画了用户访问深度)，保证一类指标不下降或者在正常的波动范围内 \n",
    "\n",
    "二类指标  广告点击率"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2.确定检验统计量 （5分）\n",
    "一类指标  PV 为了在短时间内能进行进行检测我们用 人均pv之差作为统计量   \n",
    "\n",
    "二类指标  用 点击占比，也就是点击率之差作为统计量\n"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3.埋点收集数据 （10分）\n",
    "在广告位置 曝光和点击收集\n",
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4.确定H0,H1 （10分）\n",
    "一类指标 H1: control_pv - treatment_pv < 2 *std(control_pv)  \n",
    "      H0: control_pv - treatment_pv >= 2 * std(control_pv) \n",
    "      \n",
    "二类指标 H1: treatment_p- control_p >0  \n",
    "      H0: treatment_p- control_p <=0"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "# 5.确定显著水平α （5分)\n",
    "\n",
    "一类错误使用默认值 α= 0.05  \n",
    "二类错误使用默认值 β= 0.2\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "alpha =0.05\n",
    "beta =0.2"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 6.计算样本量 （15分）\n",
    "一类指标没日志数据，我们不计算，只计算二类指标\n",
    "\n",
    "从二类指标的H0和H1 中我们知道时单侧(右侧) 检验 ，从统计量的确定中，我们得知是比值，所以统计量的计算公式如下\n",
    "![image.png](attachment:image.png)\n",
    "\n",
    "其中 treatment_p 为 p,   control_p为p0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.1203863045004612"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 计算对照组广告的点击率（由于converted值为0，1 所以求占比和均值结果一致）\n",
    "p_a = data.converted[(data.group==\"control\") & (data.landing_page==\"old_page\")].mean()\n",
    "p_a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.10589344218918344"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 公式的pa*(1-pa) = \n",
    "pa_1_pa= p_a * (1-p_a)\n",
    "pa_1_pa"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.6448536269514729"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 均值之差在大样本下其分布为近似正态分布\n",
    "Z1_alpha = stats.norm.isf(alpha,loc=0,scale=1)\n",
    "Z1_alpha"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8416212335729142"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 二类错误的概率\n",
    "Z1_beta = stats.norm.isf(beta,loc=0,scale=1)\n",
    "Z1_beta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-0.01\n"
     ]
    }
   ],
   "source": [
    "#H1为 treatment_p- control_p >0，为计算样本量，这里需要指定一个非0的值， 此值的绝对值越小样本量越大， \n",
    "#我们先指定一个偏小的值 0.01\n",
    "p_b = p_a + 0.01\n",
    "pa_pb = -0.01\n",
    "print(pa_pb)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.11338571609917422\n"
     ]
    }
   ],
   "source": [
    "# p * (1-p)\n",
    "pb_1_pb = p_b * (1- p_b)\n",
    "print(pb_1_pb)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "13557.059459068936"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n = (pa_1_pa + pb_1_pb) * (((Z1_alpha +Z1_beta) / pa_pb)**2)\n",
    "n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "group      landing_page\n",
       "control    new_page          1928\n",
       "           old_page        145274\n",
       "treatment  new_page        145311\n",
       "           old_page          1965\n",
       "Name: user_id, dtype: int64"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看我们的样本量是否满足最低样本量 \n",
    "data.groupby([\"group\",\"landing_page\"])[\"user_id\"].count()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 7 利用统计工具实现检验(45分) \n",
    "\n",
    "1. 读取ab_test.csv 数据 \n",
    "\n",
    "2. 计算统计量 \n",
    "按照h0 treatment - control <= 0\n",
    "取某日值（，计算均值）计算方差\n",
    "形成（u=0，混合方差）的正态分布中\n",
    "计算h1的积分（累计概率密度） 例如本体h1 为>0 则求统计量（某日样本均值差）\n",
    "p（h1）与a（阿尔法）比较\n",
    "p(h1)>0.05 则h0成立\n",
    "3. 计算统计量的显著性P值 \n",
    "\n",
    "4. 用统计量的显著性P值与显著性α比较做决策 \n",
    "\n",
    " "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>group</th>\n",
       "      <th>landing_page</th>\n",
       "      <th>converted</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>control</td>\n",
       "      <td>new_page</td>\n",
       "      <td>0.106383</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>control</td>\n",
       "      <td>old_page</td>\n",
       "      <td>0.113809</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>treatment</td>\n",
       "      <td>new_page</td>\n",
       "      <td>0.113781</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>treatment</td>\n",
       "      <td>old_page</td>\n",
       "      <td>0.097826</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       group landing_page  converted\n",
       "0    control     new_page   0.106383\n",
       "1    control     old_page   0.113809\n",
       "2  treatment     new_page   0.113781\n",
       "3  treatment     old_page   0.097826"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = data[data.date=='2017-01-03'].groupby([\"group\",\"landing_page\"],as_index=False)[\"converted\"].mean()\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#h0：treated-control)0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-2.820284587351507e-05"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tongjiliang = df.converted[2] - df.converted[1] # 均值之差\n",
    "tongjiliang"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.11380880121396054"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#统计当日在old_page的人数\n",
    "n1 = data[data.date=='2017-01-03'].converted[(data.group==\"control\") & (data.landing_page==\"old_page\")].mean()\n",
    "n1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6590 6618\n"
     ]
    }
   ],
   "source": [
    "n1 = data[data.date=='2017-01-03'].converted[(data.group==\"control\") & (data.landing_page==\"old_page\")].size\n",
    "n2 = data[data.date=='2017-01-03'].converted[(data.group==\"treatment\") & (data.landing_page==\"new_page\")].size\n",
    "print(n1,n2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.005526379176809786"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "error  = np.sqrt(df.converted[2] * (1-df.converted[2])/n2  + df.converted[1] * (1-df.converted[1])/n1 )\n",
    "error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5020359187180234"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tongjiliang_p = 1-stats.norm.cdf(tongjiliang,0,error) \n",
    "#cfd累计必读函数求x左侧积分 0 =假设检验 u1-u2，error 标准差 统计量 = 1\n",
    "#为什么a取统计量\n",
    "tongjiliang_p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9505285319663519 0.9750021048517795 0.9950599842422293\n"
     ]
    }
   ],
   "source": [
    "#stats.norm.cdf(a,均值,方差)：累积概率密度函数\n",
    "x=stats.norm.cdf(1.65,loc=0,scale=1)\n",
    "\n",
    "y=stats.norm.cdf(1.96,loc=0,scale=1)\n",
    "\n",
    "z=stats.norm.cdf(2.58,loc=0,scale=1)\n",
    "\n",
    "print(x,y,z)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "显著性P > α 实验组点击率 < 对照组\n"
     ]
    }
   ],
   "source": [
    "if(tongjiliang_p > alpha):\n",
    "    print(\"显著性P > α 实验组点击率 < 对照组\")\n",
    "else:\n",
    "    print(\"显著性P < α 实验组点击率 > 对照组\")\n",
    "# treat-com<0 t实验组-"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [],
   "source": [
    "#封装如下 h0 :a-b<=0 计算h1 的p 右侧积分\n",
    "def ABtest_P(df: pd.DataFrame, group_col: str = None, value_col: str = None ,alpha:float = 0.05):\n",
    "    '''\n",
    "    :param df: 被分析DateFrame对象\n",
    "    :param alpha: 显著性\n",
    "    :param group_col: 组列的名字，默认为df的第一列\n",
    "    :param value_col: 值列的名字,默认为df的第2列\n",
    "    :return: tongjiliang p_value p_type\n",
    "    '''\n",
    "        # 列名\n",
    "    if not group_col:\n",
    "        group_col = df.columns[0]\n",
    "    if not value_col:\n",
    "        value_col = df.columns[1]\n",
    "        \n",
    "    temp = df.groupby(group_col,as_index=False)[value_col].mean()\n",
    "#     print(temp)\n",
    "    temp_n = df.groupby(group_col,as_index=False)[value_col].count()\n",
    "#     print(temp_n)\n",
    "    tongjiliang =- temp.iloc[0,1] + temp.iloc[1,1]\n",
    "        \n",
    "    diff_error =np.sqrt(temp.iloc[0,1] *(1-temp.iloc[0,1])/temp_n.iloc[0,1] +  temp.iloc[1,1] *(1-temp.iloc[1,1])/temp_n.iloc[1,1])\n",
    "#     print(diff_error)\n",
    "#     tongjiliang_left_p = stats.norm.cdf(tongjiliang,0,diff_error)\n",
    "    tongjiliang_right_p = 1-stats.norm.cdf(tongjiliang,0,diff_error) # 统计量正负的问题 对于tongjiliang 要遵循原假设\n",
    "#     print(tongjiliang_right_p)\n",
    "#     tongjiliang_site_p = tongjiliang_left_p *2;\n",
    "#     if tongjiliang_site_p >1:\n",
    "#         tongjiliang_site_p = tongjiliang_right_p*2\n",
    "    \n",
    "    temp_l = [\n",
    "#               [temp.iloc[0,0],temp.iloc[1,0],tongjiliang,\"左侧\",tongjiliang_left_p,np.where(tongjiliang_left_p<alpha,\"显著\",\"不显著\")],\n",
    "              [temp.iloc[0,0],temp.iloc[1,0],tongjiliang,\"右侧\",tongjiliang_right_p,np.where(tongjiliang_right_p<alpha,\"显著\",\"不显著\")]\n",
    "#               [temp.iloc[0,0],temp.iloc[1,0],tongjiliang,\"双侧\",tongjiliang_site_p,np.where(tongjiliang_site_p<alpha,\"显著\",\"不显著\")]\n",
    "              ]\n",
    "    temp = pd.DataFrame(temp_l,columns =[\"p\",\"p0\",\"统计量\",\"检测\",\"p_value\",\"结果\"])\n",
    "    \n",
    "    return temp\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>group</th>\n",
       "      <th>converted</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>treatment</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>treatment</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>control</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>72</th>\n",
       "      <td>treatment</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>84</th>\n",
       "      <td>control</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        group  converted\n",
       "38  treatment          0\n",
       "41  treatment          0\n",
       "57    control          0\n",
       "72  treatment          0\n",
       "84    control          0"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "temp  = data[data.date=='2017-01-03'].loc[((data.group==\"control\") & (data.landing_page==\"old_page\")) \n",
    "                  | ((data.group==\"treatment\") & (data.landing_page==\"new_page\")),[\"group\",\"converted\"]]\n",
    "temp.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "       group  converted\n",
      "0    control   0.113809\n",
      "1  treatment   0.113781\n",
      "       group  converted\n",
      "0    control       6590\n",
      "1  treatment       6618\n",
      "0.005526379176809786\n",
      "0.5020359187180234\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>p</th>\n",
       "      <th>p0</th>\n",
       "      <th>统计量</th>\n",
       "      <th>检测</th>\n",
       "      <th>p_value</th>\n",
       "      <th>结果</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>control</td>\n",
       "      <td>treatment</td>\n",
       "      <td>-0.000028</td>\n",
       "      <td>右侧</td>\n",
       "      <td>0.502036</td>\n",
       "      <td>不显著</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         p         p0       统计量  检测   p_value   结果\n",
       "0  control  treatment -0.000028  右侧  0.502036  不显著"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ABtest_P(temp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'C:\\\\Users\\\\Administrator\\\\拉钩数据分析\\\\7_2'"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pwd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
